﻿#define _CRT_SECURE_NO_WARNINGS 1
//描述
//输入两个升序排列的序列，将两个序列合并为一个有序序列并输出。
//
//数据范围： 1 \le n, m \le 1000 \1≤n, m≤1000  ， 序列中的值满足 0 \le val \le 30000 \0≤val≤30000 
//输入描述：
//输入包含三行，
//
//第一行包含两个正整数n, m，用空格分隔。n表示第二行第一个升序序列中数字的个数，m表示第三行第二个升序序列中数字的个数。
//
//第二行包含n个整数，用空格分隔。
//
//第三行包含m个整数，用空格分隔。
//输出描述：
//输出为一行，输出长度为n + m的升序序列，即长度为n的升序序列和长度为m的升序序列中的元素重新进行升序序列排列合并。
//示例1
//输入：
//5 6
//1 3 7 9 22
//2 8 10 17 33 44
//输出：
//1 2 3 7 8 9 10 17 22 33 44
#include<stdio.h>
//int main()
//{
//	int n, m;
//	scanf("%d %d", &n, &m);
//  int arr[1000]={0};
//	int t = 0;
//	while (1)
//	{
//		if (t < n)
//		{
//			scanf("%d", &arr[t]);
//			t++;
//		}
//		else if (t >= n && t < n + m)
//		{
//			scanf("%d", &arr[t]);
//			t++;
//		}
//		else
//			break;
//	}
//	int i = 0;
//	for (i = 0; i < m + n - 1; i++)
//	{
//		int j = 0;
//		for (j = 0; j < m + n - 1 - i; j++)
//		{
//			if (arr[j] > arr[j + 1])
//			{
//				int tmp = arr[j];
//				arr[j] = arr[j + 1];
//				arr[j + 1] = tmp;
//			}
//		}
//	}
//	for (i = 0; i < m + n; i++)
//	{
//		printf("%d ", arr[i]);
//	}
//	return 0;
//}

//实现一个对整形数组的冒泡排序
//void bubble_sort(int arr[], int sz)
//{
//	int i = 0;
//	for (i = 0; i < sz - 1; i++)
//	{
//		int j = 0;
//		for (j = 0; j < sz - 1 - i;j++)
//		{
//			if (arr[j] > arr[j + 1])
//			{
//				int tmp = arr[j];
//				arr[j] = arr[j + 1];
//				arr[j + 1] = tmp;
//			}
//		}
//	}
//}
//int main()
//{
//	int arr[10];
//	int sz = sizeof(arr) / sizeof(int);
//	int i = 0;
//	for (i = 0; i < sz; i++)
//	{
//		scanf("%d", &arr[i]);
//	}
//	bubble_sort(arr, sz);
//	for (i = 0; i < sz; i++)
//	{
//		printf("%d ", arr[i]);
//	}
//	return 0;
//}

//描述
//小乐乐上课需要走n阶台阶，因为他腿比较长，所以每次可以选择走一阶或者走两阶，那么他一共有多少种走法？
//
//输入描述：
//输入包含一个整数n(1 ≤ n ≤ 30)
//输出描述：
//输出一个整数，即小乐乐可以走的方法数。
//示例1
//输入：2
//输出：2
//示例2
//输入：10
//输出：89
//1．没有跨两级的情况：每次跨一级，1种跨法；
//2．有一次跨两级：需要跨9次，9次中选取一次跨两级，即9选1，有
//C
//1
//9
//= 9种情况；
//3．有两次跨两级：需要8次，8次中选取2次跨两级，即8选2，有
//C
//2
//8
//= 28种跨法；
//4．有3次两级：需要跨7次，7次中选取3次跨两级，即7选3，有
//C
//3
//7
//= 35种；
//5．有四次跨两级：需要跨6次，6次中选取4次跨两级，即6选4，有
//C
//4
//6
//= 15种；
//6．有五次跨两级：有1种跨法．
//共计：1 + 9 + 28 + 35 + 15 + 1 = 89（种）；
//int main()
//{
//	int n;
//	int sum=0;
//	scanf("%d", &n);
//	int m;//设有m次走两阶,则需走n-m次
//	for (m = 0; m <= n / 2; m++)
//	{
//		int count = n - m;
//		int i;
//		int x = 1;
//		int y = 1;
//		int j = m * 1;
//		for (i = 0; i < m; i++)
//		{
//			x *= count;
//			y *= j;
//			count--,j--;
//		}
//		sum += x / y;
//	}
//	printf("%d\n", sum);
//	return 0;
//}
//int F(int n)
//{
//	while (n > 2)
//	{
//		return F(n - 1) + F(n - 2);
//	}
//	return n;
//}
//int main()
//{
//	int n;
//	scanf("%d", &n);
//	int ret = F(n);
//	printf("%d\n", ret);
//	return 0;
//}

//描述
//变种水仙花数 - Lily Number：把任意的数字，从中间拆分成两个数字，比如1461 可以拆分成（1和461）, （14和61）, （146和1), 如果所有拆分后的乘积之和等于自身，则是一个Lily Number。
//
//例如：
//
//655 = 6 * 55 + 65 * 5
//
//1461 = 1 * 461 + 14 * 61 + 146 * 1
//
//求出 5位数中的所有 Lily Number。
//
//输入描述：
//无
//输出描述：
//一行，5位数中的所有 Lily Number，每两个数之间间隔一个空格。

//int main()
//{
//	int n;
//	for (n = 10000; n < 100000; n++)
//	{
//		int ret = (n / 10000) * (n % 10000) + (n / 1000) * (n % 1000) + (n / 100) * (n % 100) + (n / 10) * (n % 10);
//		if (n == ret)
//		{
//			printf("%d ", n);
//		}
//	}
//	return 0;
//}

//描述
//KiKi想知道已经给出的三条边a，b，c能否构成三角形，如果能构成三角形，判断三角形的类型（等边三角形、等腰三角形或普通三角形）。
//输入描述：
//题目有多组输入数据，每一行输入三个a，b，c(0 < a, b, c < 1000)，作为三角形的三个边，用空格分隔。
//	输出描述：
//	针对每组输入数据，输出占一行，如果能构成三角形，等边三角形则输出“Equilateral triangle!”，等腰三角形则输出“Isosceles triangle!”，其余的三角形则输出“Ordinary triangle!”，反之输出“Not a triangle!”。
//	示例1
//	输入：
//	2 3 2
//	3 3 3
//	输出：
//	Isosceles triangle!
//	Equilateral triangle!
int main()
{
	int a, b, c;
	while (scanf("%d %d %d", &a, &b, &c) != EOF)
	{
		if (a + b > c && a + c > b && b + c > a)
		{
			if (a==b && a==c && b==c)
			{
				printf("Equilateral triangle!\n");
			}
			else if (a == b || a == c || b == c)
			{
				printf("Isosceles triangle!\n");
			}
			else
				printf("Ordinary triangle!\n");
		}
		else
			printf("Not a triangle!");
	}
	return 0;
}